package main //go语言类型

import (
	"fmt"
	"math"
)

type Student struct {
	Age  int
	Name string
}

func main() {

	/*
	   bool()
	   byte()
	   int 8 16 32 64 int8 int16
	   uint 上面int，无符号的
	   float8 16 32 64
	   complex64 128 1+2i  复数
	   uintptr
	   string
	   array  数组
	   struct   结构体
	   function   函数
	   interface   接口

	   //以下三种要用make来创建，不能用new。因为这三种结构比较复杂，make不只是创建，还做了其他的一些工作
	   map 字典
	   slice 切片
	   channel 管道
	*/

	s := "abc"
	fmt.Println([]byte(s))
	//b:=false

	stu := new(Student)
	//stu := &Student{}
	fmt.Println(&stu) //取地址
	fmt.Println(*stu) //取内容

	fmt.Println(math.MinInt8, math.MaxInt16)
	fmt.Println(math.MinInt8, math.MaxUint16)

	m := make(map[int]string)
	m[1] = "1"
	m[2] = "2"
	fmt.Println(m)

	//s1 := []int{1,2,3,4,5}
	//s1 = s1[2:4]
	//fmt.Println(s1)

	//s1 := make([]int,1,5)
	//s1 = append(s1,12)
	//s1[1] = 1
	//fmt.Println(s1)

	s1 := make([]int, 0)
	s1 = append(s1, 12)
	fmt.Println(s1)

	c := make(chan int, 2) //channe可以理解为消息队列，此处是创建了一个只能存放证书的消息队列
	c <- 1                 //表示将1 存入c（可看箭头方向，理解为1向c里射入）
	fmt.Println(<-c)       //可根据箭头的方向，理解为将c的值抛出

	//该做法不对
	//p:=new(map[int]string)
	//m1:=*p
	//m1[1] = "1"
	//fmt.Println(m1)

	//类型转换

	a := int(10)
	b := uint8(a)
	fmt.Println(b)

	//自定义类型
	type color int //虽然底层是int类型，但是red和green和color是完全不一样的类型
	var red color
	red = 1
	var green color
	green = 2
	fmt.Println(red, green)
	//例子：虽然底层是int类型，但是red和green和color是完全不一样的类型，自定义类型从基础类型继承下来的东西比较少
	//red1 := int(1)
	//red1 = red
	//fmt.Println(red1)

	//const(
	//	red int = iota  枚举
	//	green
	//)

}
